package com.zy;

/**
 * @Author zhaoyi
 * @date 2019/11/4
 * number 为0 生产
 * number 为1 消费
 * <p>
 * 多线程:
 * 高类聚低耦合前提现,线程操作资源类
 * 判断/干活/通知
 * 防止虚假唤醒
 */
public class AirConditioner {

    private int number = 0;

    //public synchronized void increase() throws InterruptedException：增加方法，可能存在线程安全问题
    public synchronized void increase() throws InterruptedException {
        //判断
        if (number != 0) {
            //等待
            this.wait();
        }
        //干活
        number++;
        System.out.println(Thread.currentThread().getName() + "生产了一个空调, 通知消费" + number);
        //通知
        this.notifyAll();
    }

    public synchronized void reduce() throws InterruptedException {
        //判断
        if (number == 0) {
            this.wait();
        }
        //干活
        number--;
        System.out.println(Thread.currentThread().getName() + "消费了一个空调, 请重新生成" + number);
        //通知
        this.notifyAll();
    }


}
